package cn.edu.sdjzu.xg.eagle.exception;

/**
 * 认证异常类，用于处理与用户认证相关的错误
 * @author STG
 * @project xg23
 * @date 2024/3/27
 */
public class AuthenticationException extends BaseException {
    private static final long serialVersionUID = 1L;

    /**
     * 默认模块名
     */
    private static final String DEFAULT_MODULE = "AUTH";

    /**
     * 默认错误码
     */
    private static final String DEFAULT_CODE = "AUTH_001";

    /**
     * 默认错误消息
     */
    private static final String DEFAULT_MESSAGE = "认证失败：用户名或密码错误";

    /**
     * 构造方法，使用默认模块名和错误码
     * @param defaultMessage 自定义错误消息
     */
    public AuthenticationException(String defaultMessage) {
        super(DEFAULT_MODULE, DEFAULT_CODE, null, defaultMessage, null);
    }

    /**
     * 构造方法，使用默认模块名
     * @param code 错误码
     * @param defaultMessage 自定义错误消息
     */
    public AuthenticationException(String code, String defaultMessage) {
        super(DEFAULT_MODULE, code, null, defaultMessage, null);
    }

    /**
     * 构造方法，使用默认模块名
     * @param code 错误码
     * @param defaultMessage 自定义错误消息
     * @param e 异常对象
     */
    public AuthenticationException(String code, String defaultMessage, Exception e) {
        super(DEFAULT_MODULE, code, null, defaultMessage, e);
    }

    /**
     * 构造方法，使用默认模块名和错误码
     * @param defaultMessage 自定义错误消息
     * @param e 异常对象
     */
    public AuthenticationException(String defaultMessage, Exception e) {
        super(DEFAULT_MODULE, DEFAULT_CODE, null, defaultMessage, e);
    }

    /**
     * 构造方法，使用默认模块名和错误码
     * @param e 异常对象
     */
    public AuthenticationException(Exception e) {
        super(DEFAULT_MODULE, DEFAULT_CODE, null, DEFAULT_MESSAGE, e);
    }

    /**
     * 构造方法，使用默认模块名
     * @param code 错误码
     * @param args 错误码对应的参数
     */
    public AuthenticationException(String code, Object[] args) {
        super(DEFAULT_MODULE, code, args, null, null);
    }

    /**
     * 构造方法，使用默认模块名
     * @param code 错误码
     * @param args 错误码对应的参数
     * @param defaultMessage 自定义错误消息
     */
    public AuthenticationException(String code, Object[] args, String defaultMessage) {
        super(DEFAULT_MODULE, code, args, defaultMessage, null);
    }

    /**
     * 构造方法，使用默认模块名
     * @param code 错误码
     * @param args 错误码对应的参数
     * @param defaultMessage 自定义错误消息
     * @param e 异常对象
     */
    public AuthenticationException(String code, Object[] args, String defaultMessage, Exception e) {
        super(DEFAULT_MODULE, code, args, defaultMessage, e);
    }

    /**
     * 构造方法，使用默认模块名和错误码
     * @param args 错误码对应的参数
     */
    public AuthenticationException(Object[] args) {
        super(DEFAULT_MODULE, DEFAULT_CODE, args, null, null);
    }

    /**
     * 构造方法，使用默认模块名和错误码
     * @param args 错误码对应的参数
     * @param defaultMessage 自定义错误消息
     */
    public AuthenticationException(Object[] args, String defaultMessage) {
        super(DEFAULT_MODULE, DEFAULT_CODE, args, defaultMessage, null);
    }

    /**
     * 构造方法，使用默认模块名和错误码
     * @param args 错误码对应的参数
     * @param defaultMessage 自定义错误消息
     * @param e 异常对象
     */
    public AuthenticationException(Object[] args, String defaultMessage, Exception e) {
        super(DEFAULT_MODULE, DEFAULT_CODE, args, defaultMessage, e);
    }
}